//
// Created by wujehy on 2020/5/21.
//

#ifndef GEEJOAN_HKDF_H
#define GEEJOAN_HKDF_H

#include "SecurityCommon.h"
/**
 * @brief kdf 的封装
 * @pre 依赖 SecurityCommon 通用算法 集合
 */
 namespace GeeJoan
 {
     namespace Common
     {
         class HKDF
         {
         private:
             int m_iteration_start_offset = 0;

             int extract(std::string &prk, const std::string &salt, const std::string &input_key_material);

             int expand(std::string &output, const std::string &prk, const std::string &info, int outputlen);

         public:
             /**
              * @brief 设置偏移量
              * @param mIterationStartOffset
              */
             void setMIterationStartOffset(int mIterationStartOffset);

             /**
              * @brief 计算 HKDF
              * @param outPut 输出字符串
              * @param salt
              * @param input_key_material
              * @param info
              * @param output_len  输出长度
              * @return
              */
             int Calculate(
                     std::string &outPut,
                     const std::string &salt,
                     const std::string &input_key_material,
                     const std::string &info, int output_len);

         };

     }
 }

#endif //GEEJOAN_HKDF_H
